import router from './router'
import store from './store' // 引入store实例和组件中的this.$store是一回事
import nprogress from 'nprogress' // 引入进度条
import 'nprogress/nprogress.css' // 引入进度条样式

const whiteList = ['/login', '/404'] // 定义白名单
router.beforeEach(async(to, from, next) => {
  nprogress.start() // 开启进度条的意思
  if (store.getters.token) {
    if (to.path === '/login') { // 如果要访问的是登录页
      next('/') // 跳到主页
    } else {
      // 只有放过去的时候才能去获取用户资料
      // 如果当前vuex中有用户的资料的id表示已经有资料了，就不需要获取了
      if (!store.getters.userId) {
        // 如果没有id才表示当前用户资料没有获取过
        await store.dispatch('user/getUserInfo')
      }
      next() // 直接放行
    }
  } else {
    // 没有token的情况下
    if (whiteList.indexOf(to.path) > -1) {
      // 表示要去的地址在白名单
      next()
    } else {
      next('/login')
    }
  }
  nprogress.done() // 解决手动切换地址时，进度条不关闭的问题
})
router.afterEach(() => {
  nprogress.done() // 关闭进度条
})
